该语句用于更新一张主键表中的数据行。
2.3 ~ 2.5 版本,StarRocks 提供 UPDATE 语句,并且仅支持单表 UPDATE 且不支持公用表表达式(CTE)。从 3.0 版本开始,StarRocks 丰富了 UPDATE 语法,支持使用多表关联和 CTE。如果需要将待更新的表与数据库中其他表关联,则可以在 FROM 子句或 CTE 中引用其他的表。从 3.1 版本开始,支持列模式的部分更新,适用于涉及少数列但是大量行的场景,加快更新速度。
使用说明如果为多表 UPDATE,则您需要确保 UPDATE 语句中 FROM 子句的表表达式可以转换成等价的 JOIN 查询语句。因为 StarRocks 实际执行 UPDATE 语句时,内部会进行这样的转换。假设 UPDATE 语句为 UPDATE t0 SET v1=t1.v1 FROM t1 WHERE t0.pk = t1.pk;,该 FROM 子句的表表达式可以转换为 t0 JOIN t1 ON t0.pk=t1.pk;。并且 StarRocks 根据 JOIN 查询的结果集,匹配待更新表的数据行,更新其指定列的值。如果结果集中存在多行数据和待更新表的某一行数据相匹配,则待更新表中这行数据指定列更新后的值,是结果集多行数据中随机一行的指定列的值。
语法单表 UPDATE
如果待更新表的数据行满足 WHERE 条件,则对该数据行的指定列赋予新值。
[ WITH [, ...] ]UPDATE SET = [, ...]WHERE多表 UPDATE
基于多表关联查询的结果集与待更新的表进行匹配,如果待更新表的数据行匹配结果集并且满足 WHERE 条件,则对该数据行的指定列赋予新值。
[ WITH [, ...] ]UPDATE SET = [, ...][ FROM [, ...] ]WHERE 参数说明with_query
一个或多个可以在 UPDATE 语句中通过名字引用的 CTE。CTE 是一个临时结果集,可以提高复杂语句的易读性。
table_name
待更新的表的名称。
column_name
待更新的列的名称。不需要包含表名,例如 UPDATE t1 SET t1.col = 1 是不合法的。
expression
给列赋值的表达式。
from_item
引用数据库中一个或者多个其他的表。该表与待更新的表进行连接,WHERE 子句指定连接条件,最终基于连接查询的结果集给待更新的表中匹配行的列赋值。 例如 FROM 子句为 FROM t1 WHERE t0.pk = t1.pk;,StarRocks 实际执行 UPDATE 语句时会将该 FROM 子句的表表达式会转换为 t0 JOIN t1 ON t0.pk=t1.pk;。
where_condition
只有满足 WHERE 条件的行才会被更新。该参数为必选,防止误更新整张表。如需更新整张表,请使用 WHERE true。如果使用列模式的部分更新,则该参数不是必选。
列模式的部分更新(自 3.1)列模式的部分更新适用于涉及少数列并且大量行的场景。在该场景,开启列模式,更新速度更